package cn.hfjava.kz.entity.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;

/**
 * 权限表
 *
 * @TableName permissions
 */
@TableName(value = "permissions")
@Getter
@Setter
@AllArgsConstructor
@Tag(name = "权限表", description = "")
public class Permission implements Serializable {

    public Permission(){
        this.children = new ArrayList<>();
    }

    /**
     * 权限编号
     */
    @Schema(description = "使用自动增长主键赋值")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 权限名称，例如：目录名称，菜单名称，按钮名称
     */
    @Schema(description = "例如：目录名称，菜单名称，按钮名称")
    @TableField(value = "title")
    private String title;

    /**
     * 父节点ID，默认值为0，0表示第一级节点
     */
    @Schema( description = "默认值为0，0表示第一级节点")
    @TableField(value = "pid")
    private Integer pid;

    /**
     * 祖级ids，作用：回显树形目录结构
     */
    @Schema( description = "作用：回显树形目录结构")
    @TableField(value = "pids")
    private String pids;

    /**
     * 类型，默认值0，0表示目录类型，1表示菜单类型，2表示按钮类型
     */
    @Schema(description = "默认值0，0表示目录类型，1表示菜单类型，2表示按钮类型")
    @TableField(value = "type")
    private Integer type;

    /**
     * 图标，例如：fa fa-tasks
     */
    @Schema(description = "例如：fa fa-tasks")
    @TableField(value = "icon")
    private String icon;

    /**
     * 权限标识，例如：system:user:export
     */
    @Schema(description = "例如：system:user:export")
    @TableField(value = "perms")
    private String perms;


    /**
     * 组件名称，默认空字符串
     */
    @Schema( description = "默认空字符串")
    @TableField(value = "name")
    private String name;

    /**
     * 组件路径，默认空字符串
     */
    @Schema( description = "默认空字符串")
    @TableField(value = "path")
    private String path;


    /**
     * 组件路径
     */
    @TableField(value = "component")
    private String component;



    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    @TableField(exist = false)
    private List<Permission> children;
    /**
     * 显示排序 (值越小越靠前)
     */
    @TableField(value = "sort", exist = true)
    private Integer sort;
}
